package com.amos.muexamclient.sys.service.impl;

import com.amos.exception.BizExceptionEnum;
import com.amos.muexamclient.sys.entity.SysConfigEntity;
import com.amos.muexamclient.sys.mapper.SysConfigMapper;
import com.amos.muexamclient.sys.service.SysConfigService;
import com.amos.muexamclient.sys.service.dto.SysConfigDTO;
import com.amos.muexamcore.core.AbstractPageService;
import com.amos.muexamcore.core.BaseMapper;
import com.amos.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Copyright © 2018 五月工作室. All rights reserved.
 *
 * @Package com.amos.muexamclient.sys.service.impl
 * @ClassName SysConfigServiceImpl
 * @Description TODO
 * @Author Amos
 * @Modifier
 * @Date 2020-03-24 14:33:05
 * @Version 1.0
 **/
@Service
public class SysConfigServiceImpl extends AbstractPageService<SysConfigDTO, SysConfigEntity> implements SysConfigService {

    @Autowired
    private SysConfigMapper sysConfigMapper;

    /**
     * 条件查询
     *
     * @param dto 查询的条件
     */
    @Override
    public List<SysConfigDTO> list(SysConfigDTO dto) {
        return this.getMapper().select(dto);
    }

    /**
     * 返回BaseDao对象
     */
    @Override
    public BaseMapper<SysConfigEntity, SysConfigDTO> getMapper() {
        return sysConfigMapper;
    }

    /**
     * 保存之间的校验
     *
     * @param dto 保存的对象
     */
    @Override
    public void preValidate(SysConfigDTO dto) {
        this.validate(dto);
    }

    private void validate(SysConfigDTO dto) {
        SysConfigDTO config = this.getConfigByKey(dto.getConfigKey());
        if (dto.isNew()) {
            if (!StringUtils.isNullOrEmpty(config)) {
                BizExceptionEnum.DEFINED_EXCEPTION.definedMsg("新增参数'" + config.getConfigName() + "'失败，参数键名已存在").throwException();
            }
        } else {
            if (!dto.getId().equalsIgnoreCase(config.getId())) {
                BizExceptionEnum.DEFINED_EXCEPTION.definedMsg("修改参数'" + config.getConfigName() + "'失败，参数键名已存在").
                        throwException();
            }
        }
    }

    /**
     * 添加子集数据
     *
     * @param id  主表ID
     * @param dto 主表DTO对象
     */
    @Override
    public void appendSubsidiary(String id, SysConfigDTO dto) {

    }

    @Override
    public String getConfigKey(String configKey) {
        SysConfigDTO configDTO = this.sysConfigMapper.getConfigByKey(configKey);
        if (StringUtils.isNullOrEmpty(configDTO)) {
            return "";
        }
        return configDTO.getConfigValue();
    }

    @Override
    public SysConfigDTO getConfigByKey(String configKey) {
        return this.sysConfigMapper.getConfigByKey(configKey);
    }
}
